This notebook includes preliminary attempts to visualize some basic information about the dataset.
#df <- read.csv('../../Data/indonesia_indicators_time.csv')
Data Messiness
This section details the messiness of our dataset. First, we took a quick look at a few ways that items have been disaggregated.
When we initially made unique measures seperate from one another, we concatenated all of the columns in the dataset having to do iwth disaggregation. Based on a cursory look, these are some of the breakdowns (note that these categories may not be complete). When we could identify that everyone appeared to be included (e.g., ‘ALLREGIONS’ or ‘BOTHSEX’), we did not count these measures as ‘disaggregated.’
`summarise()` has grouped output by 'disaggregation'. You can override using the `.groups` argument.

`summarise()` has grouped output by 'disaggregation'. You can override using the `.groups` argument.

'hctreemap' is deprecated.
Use 'data_to_hierarchical' instead.
See help("Deprecated")`filter_()` was deprecated in dplyr 0.7.0.
Please use `filter()` instead.
See vignette('programming') for more help
This is a bit more of a look at the above disaggregation, wherein we look also at whether measures are disaggregated and how many (per target, subset by goal)
Error: unexpected ',' in " panel.grid.major = element_blank(),"
Finally, the following is an example of our current progress (with Indonesia) in terms of how many indicators we have removed for each target / goal.
Guatemala
Also wanted to look at the same with guatemala
`summarise()` has grouped output by 'Target', 'Indicator', 'SeriesDescription'. You can override using the `.groups` argument.
<error/rlang_error>
Can't show last error because no error was recorded yet
Backtrace:
1. rlang::last_error()
Run `rlang::last_trace()` to see the full context.
`summarise()` has grouped output by 'disaggregation'. You can override using the `.groups` argument.

'hctreemap' is deprecated.
Use 'data_to_hierarchical' instead.
See help("Deprecated")
This is a bit more of a look at the above disaggregation, wherein we look also at whether measures are disaggregated and how many (per target, subset by goal)

















Measures with only one existent year
Weighted degree of each measure
LS0tCnRpdGxlOiAiUHJhY3RpY3VtIFNERyBHcm91cCAyIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAotLS0KClRoaXMgbm90ZWJvb2sgaW5jbHVkZXMgcHJlbGltaW5hcnkgYXR0ZW1wdHMgdG8gdmlzdWFsaXplIHNvbWUgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRhdGFzZXQuIApgYGB7ciBpbnN0YWxsIHBhY2thZ2VzLCBlY2hvID0gRkFMU0UsIGV2YWw9VFJVRSwgcmVzdWx0cz0naGlkZScsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQpyID0gZ2V0T3B0aW9uKCJyZXBvcyIpCnJbIkNSQU4iXSA9ICJodHRwOi8vY3Jhbi51cy5yLXByb2plY3Qub3JnIgpvcHRpb25zKHJlcG9zID0gcikKaW5zdGFsbC5wYWNrYWdlcygiZ2d0aGVtZXMiKSAjIEluc3RhbGwgcmVudjo6c25hcHNob3QoKQoKaW5zdGFsbC5wYWNrYWdlcygiZ3JpZEV4dHJhIikKaW5zdGFsbC5wYWNrYWdlcygncGxvdGx5JykKaW5zdGFsbC5wYWNrYWdlcygnbGlzdHZpZXdlcicpCmluc3RhbGwucGFja2FnZXMoJ2dyaWRFeHRyYScpCmluc3RhbGwucGFja2FnZXMoJ3RyZWVtYXAnKQppbnN0YWxsLnBhY2thZ2VzKCdoaWdoY2hhcnRlcicpCmluc3RhbGwucGFja2FnZXMoJ3ZpcmlkaXMnKQppbnN0YWxsLnBhY2thZ2VzKCdocmJydGhlbWVzJykKaW5zdGFsbC5wYWNrYWdlcygnRFQnKQpgYGAKCmBgYHtyIGxvYWQgbGlicmFyaWVzLCBlY2hvID0gRkFMU0UsIGV2YWw9VFJVRSwgcmVzdWx0cz0naGlkZScsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQojIGRhdGEgdmlzdWFsaXphdGlvbnMKbGlicmFyeShnZ3RoZW1lcykgCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShmb3JjYXRzKQpsaWJyYXJ5KHZpcmlkaXMpCmxpYnJhcnkoaHJicnRoZW1lcykKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoZ3JpZEV4dHJhKQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQpsaWJyYXJ5KHRyZWVtYXApCmxpYnJhcnkoRFQpCgojIGRhdGEgbWFuaXB1bGF0aW9uCmxpYnJhcnkobWFncml0dHIpCmxpYnJhcnkoZHBseXIpCmBgYAoKYGBge3J9CiNkZiA8LSByZWFkLmNzdignLi4vLi4vRGF0YS9pbmRvbmVzaWFfaW5kaWNhdG9yc190aW1lLmNzdicpCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0UsIGVjaG89RkFMU0V9CiMjIFRoaXMgaXMgYSB0ZXN0IHVzZSBjYXNlIG9mIHRoZSBkYXRhc2V0LiAKIyBHb2FsIDk6IEluZHVzdHJ5LCBJbm5vdmF0aW9uLCBhbmQgSW5mcmFzdHJ1Y3R1cmUgCmluZG9uZXNpYV90aW1lIDwtIHJlYWQuY3N2KCd+L1FNU1MvRzUwNTVfUHJhY3RpY3VtX1Byb2plY3QyL0RhdGEvaW5kb25lc2lhX2luZGljYXRvcnNfdGltZS5jc3YnKQoKZGZfOSA8LSBpbmRvbmVzaWFfdGltZSAlPiUgc3Vic2V0KFRhcmdldCA9PSAnOS4yJykKCmRmXzkgPC0gaW5kb25lc2lhX3RpbWUgJT4lIHN1YnNldChUYXJnZXQgPT0gJzkuMicpCmRmXzkKCmRmXzlfcGl2b3QgPC0gZGZfOSAlPiUgcmVuYW1lKCcyMDE4JyA9IFgyMDE4LjAsICcyMDE5JyA9IFgyMDE5LjAsICcyMDIwJyA9IFgyMDIwLjAsJzIwMjEnID0gWDIwMjEuMCkgIyU+JSAKZGZfOV9waXZvdCA8LSBkZl85X3Bpdm90ICU+JSB0aWR5cjo6cGl2b3RfbG9uZ2VyKGNvbHMgPSAnMjAxOCc6JzIwMjEnLCBuYW1lc190bz0neWVhcicpCgpkZl85X3Bpdm90IDwtIGRmXzlfcGl2b3QgJT4lIGdyb3VwX2J5KFVuaXF1ZUlELHllYXIsdmFsdWUpICU+JSBzdW1tYXJpemUoKQpkZl85X3Bpdm90IDwtIGRmXzlfcGl2b3QgJT4lIG11dGF0ZSh5ZWFyID0gYXMubnVtZXJpYyh5ZWFyKSkKcCA8LSBkZl85X3Bpdm90ICU+JSAKICBnZ3Bsb3QoLiwgYWVzKHg9eWVhciwgeSA9IHZhbHVlLCBjb2xvciA9IFVuaXF1ZUlEICkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC40KSArCiAgZ2VvbV9saW5lKCkrCiAgdGhlbWVfaXBzdW0oYmFzZV9zaXplID0gMTAsIGF4aXNfdGl0bGVfc2l6ZSA9IDEyKSArCiAgc2NhbGVfY29sb3VyX3ZpcmlkaXMoZGlyZWN0aW9uID0gLTEsIGRpc2NyZXRlID0gVCkgKwogIHRoZW1lKAogICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCkpCgpnZ3Bsb3RseShwKQpgYGAKCiMgRGF0YSBNZXNzaW5lc3MgCgpUaGlzIHNlY3Rpb24gZGV0YWlscyB0aGUgbWVzc2luZXNzIG9mIG91ciBkYXRhc2V0LiBGaXJzdCwgd2UgdG9vayBhIHF1aWNrIGxvb2sgYXQgYSBmZXcgd2F5cyB0aGF0IGl0ZW1zIGhhdmUgYmVlbiBkaXNhZ2dyZWdhdGVkLiAKCldoZW4gd2UgaW5pdGlhbGx5IG1hZGUgdW5pcXVlIG1lYXN1cmVzIHNlcGVyYXRlIGZyb20gb25lIGFub3RoZXIsIHdlIGNvbmNhdGVuYXRlZCBhbGwgb2YgdGhlIGNvbHVtbnMgaW4gdGhlIGRhdGFzZXQgaGF2aW5nIHRvIGRvIGl3dGggZGlzYWdncmVnYXRpb24uIEJhc2VkIG9uIGEgY3Vyc29yeSBsb29rLCB0aGVzZSBhcmUgc29tZSBvZiB0aGUgYnJlYWtkb3ducyAobm90ZSB0aGF0IHRoZXNlIGNhdGVnb3JpZXMgbWF5IG5vdCBiZSBjb21wbGV0ZSkuIFdoZW4gd2UgY291bGQgaWRlbnRpZnkgdGhhdCBldmVyeW9uZSBhcHBlYXJlZCB0byBiZSBpbmNsdWRlZCAoZS5nLiwgJ0FMTFJFR0lPTlMnIG9yICdCT1RIU0VYJyksIHdlIGRpZCBub3QgY291bnQgdGhlc2UgbWVhc3VyZXMgYXMgJ2Rpc2FnZ3JlZ2F0ZWQuJyAKCmBgYHtyIGluZG8gdHJlZSBtYXAsIGVjaG89RkFMU0UsIGV2YWw9VFJVRSB9CgppbmRvbmVzaWFfbWVhc3VyZXMgPC0gaW5kb25lc2lhX3RpbWUgJT4lIGdyb3VwX2J5KFRhcmdldCxJbmRpY2F0b3IsU2VyaWVzRGVzY3JpcHRpb24sVW5pcXVlSUQpICU+JSBzdW1tYXJpemUoKQoKaW5kb25lc2lhX21lYXN1cmVzIDwtIGluZG9uZXNpYV9tZWFzdXJlcyAlPiUgbXV0YXRlKGRpc2FnZ3JlZ2F0aW9uID0gaWZlbHNlKGdyZXBsKCdNQUxFfEZFTUFMRXwxNS0yNHwyNSt8MTUtNDknLFVuaXF1ZUlEKT09VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhZ2Vfc2V4JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgnVVJCQU58UlVSQUwnLFVuaXF1ZUlEKT09VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2VvZ3JhcGhpY19yZWdpb24nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgnPDVZfDwxWXw8MU0nLFVuaXF1ZUlEKT09VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoJ01JTHxDQU58RElBfFJFU3xDQVJ8TkZPfENST3xOTUF8V09EfEFMUHxXQ0h8UEVUfEJJTXxNRU98R0JPfE5NTXxGT0Z8Q0xPfE9JTHxURVh8Tk1DJyxVbmlxdWVJRCk9PVRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmF3X21hdGVyaWFsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgnVVBQU0VDfExPV1NFQycsVW5pcXVlSUQpPT1UUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VjdG9yJywnb3RoZXIvbm90X2Rpc2FnZ3JlZ2F0ZWQnKSkpKSkpCgpybGFuZzo6bGFzdF9lcnJvcigpCnRtIDwtaW5kb25lc2lhX21lYXN1cmVzICU+JSBncm91cF9ieShkaXNhZ2dyZWdhdGlvbikgJT4lIG11dGF0ZShjb3VudCA9IG4oKSkgJT4lIHVuZ3JvdXAoKSAlPiUgZ3JvdXBfYnkoZGlzYWdncmVnYXRpb24sY291bnQpICU+JSBzdW1tYXJpemUoKSAlPiUKICB0cmVlbWFwKGluZGV4PSJkaXNhZ2dyZWdhdGlvbiIsCiAgICAgICAgICB2U2l6ZT0iY291bnQiLAogICAgICAgIHR5cGU9ImluZGV4IiwKICAgICAgICBmb250c2l6ZS5sYWJlbHM9YygxMiwgOCksIAogICAgICAgIHBhbGV0dGUgPSAiQmx1ZXMiLAogICAgICAgIGZvbnRmYW1pbHkudGl0bGUgPSAiQXJpYWwgTmFycm93IiwKICAgICAgICBmb250ZmFtaWx5LmxhYmVscyA9ICJBcmlhbCBOYXJyb3ciLAogICAgICAgIGJvcmRlci5jb2w9IndoaXRlIiwKICAgICAgICB0aXRsZSA9ICdNZWFzdXJlcyBhbmQgRGlzYWdncmVnYXRpb24nCiAgKQoKaGN0cmVlbWFwKHRtLCBhbGxvd0RyaWxsVG9Ob2RlID0gVFJVRSwgbGF5b3V0QWxnb3JpdGhtID0gInNxdWFyaWZpZWQiKSAlPiUKICBoY190aXRsZSh0ZXh0ID0gIkRpc2FnZ3JlZ2F0ZWQgRGF0YSAoSW5kb25lc2lhKSAiKSAlPiUKICBoY190b29sdGlwKHBvaW50Rm9ybWF0ID0gIjxiPntwb2ludC5uYW1lfTwvYj46PGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBNZWFzdXJlczoge3BvaW50LnZhbHVlOiwuMGZ9PGJyPiIpCgpgYGAKClRoaXMgaXMgYSBiaXQgbW9yZSBvZiBhIGxvb2sgYXQgdGhlIGFib3ZlIGRpc2FnZ3JlZ2F0aW9uLCB3aGVyZWluIHdlIGxvb2sgYWxzbyBhdCB3aGV0aGVyIG1lYXN1cmVzIGFyZSBkaXNhZ2dyZWdhdGVkIGFuZCBob3cgbWFueSAocGVyIHRhcmdldCwgc3Vic2V0IGJ5IGdvYWwpCmBgYHtyIGluZG8gYmFyIGNoYXJ0LCBlY2hvPUZBTFNFLCBldmFsID1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQppbmRvbmVzaWFfZGlzYWdncmVnYXRlZF9pbmRpY2F0b3JzIDwtIGluZG9uZXNpYV90aW1lICU+JSBtdXRhdGUoZGlzYWdncmVnYXRpb24gPSBpZmVsc2UoZ3JlcGwoJ01BTEV8RkVNQUxFfDE1LTI0fDI1K3wxNS00OScsVW5pcXVlSUQpPT1UUlVFLCdhZ2Vfc2V4JywgaWZlbHNlKGdyZXBsKCdVUkJBTnxSVVJBTCcsVW5pcXVlSUQpPT1UUlVFLCdnZW9ncmFwaGljX3JlZ2lvbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGdyZXBsKCc8NVl8PDFZfDwxTScsVW5pcXVlSUQpPT1UUlVFLCd0aW1lJywKaWZlbHNlKGdyZXBsKCdNSUx8Q0FOfERJQXxSRVN8Q0FSfE5GT3xDUk98Tk1BfFdPRHxBTFB8V0NIfFBFVHxCSU18TUVPfEdCT3xOTU18Rk9GfENMT3xPSUx8VEVYfE5NQycsVW5pcXVlSUQpPT1UUlVFLCdyYXdfbWF0ZXJpYWwnLAogICAgICAgaWZlbHNlKGdyZXBsKCdVUFBTRUN8TE9XU0VDJyxVbmlxdWVJRCk9PVRSVUUsJ3NlY3RvcicsJ290aGVyL25vdF9kaXNhZ2dyZWdhdGVkJykpKSkpKSAlPiUgbXV0YXRlKGRpc2FnZ3JlZ2F0ZWRfID0gaWZlbHNlKGRpc2FnZ3JlZ2F0aW9uID09J290aGVyL25vdF9kaXNhZ2dyZWdhdGVkJywnbm90IGRpc2FnZ3JlZ2F0ZWQnLCdkaXNhZ2dyZWdhdGVkJykpICU+JSBncm91cF9ieShJbmRpY2F0b3IsZGlzYWdncmVnYXRlZF8pICU+JSBtdXRhdGUoY291bnRfZGlzYWdncmVnYXRlZCA9IG4oKSkgJT4lIHVuZ3JvdXAoKSAlPiUgZ3JvdXBfYnkoVGFyZ2V0LEluZGljYXRvcixkaXNhZ2dyZWdhdGVkXyxjb3VudF9kaXNhZ2dyZWdhdGVkKSAKCmZvcihpIGluIDE6MTcpewogIGluZG9uZXNpYV9kaXNhZ2dyZWdhdGVkX2luZGljYXRvcnMgJT4lIHN1YnNldChHb2FsPT1pKSAlPiUgCiAgICBnZ3Bsb3QoYWVzKHg9VGFyZ2V0LGZpbGw9ZGlzYWdncmVnYXRlZF8pKSArCiAgICBnZW9tX2Jhcihwb3NpdGlvbj0nc3RhY2snLGJpbndpZHRoPTMpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoJ2Rpc2FnZ3JlZ2F0ZWQnPSduYXZ5Jywnbm90IGRpc2FnZ3JlZ2F0ZWQnID0gJ2xpZ2h0Ymx1ZScpKSsKICAgIHRoZW1lX2lwc3VtKGJhc2Vfc2l6ZSA9IDEyLCBheGlzX3RpdGxlX3NpemUgPSAxNCkgKwogICAgdGhlbWUoCiAgICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkgKwogICAgICAgIGxhYnModGl0bGUgPSBwYXN0ZSgnR29hbCAnLGkpLAogICAgICAgICAgICAgIHN1YnRpdGxlID0gIkEgbnVtYmVyIG9mIGdvYWxzIGFuZCB0YXJnZXRzIGluY2x1ZGUgbWFqb3JpdHkgb2YgZGlzYWdncmVnYXRlZCBtZWFzdXJlcyIpKyAgICAKICAgIGxhYnMoZmlsbCA9ICJEaXNhZ2dyZWdhdGlvbiIsIHk9ImNvdW50IiwgeCA9ICIiKSAKfQoKYGBgCgpGaW5hbGx5LCB0aGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2Ygb3VyIGN1cnJlbnQgcHJvZ3Jlc3MgKHdpdGggSW5kb25lc2lhKSBpbiB0ZXJtcyBvZiBob3cgbWFueSBpbmRpY2F0b3JzIHdlIGhhdmUgcmVtb3ZlZCBmb3IgZWFjaCB0YXJnZXQgLyBnb2FsLiAKYGBge3Igb3VyIHByb2Nlc3Nlc30KcHJvY2Vzc2VkSW5kbyA9ICByZWFkLmNzdignfi9RTVNTL0c1MDU1X1ByYWN0aWN1bV9Qcm9qZWN0Mi9EYXRhL3Byb2Nlc3NlZEluZG8uY3N2JykKbnJvdyhwcm9jZXNzZWRJbmRvKQpwcm9jZXNzZWRJbmRvX05vX0Rpc2FnZyA9IHJlYWQuY3N2KCd+L1FNU1MvRzUwNTVfUHJhY3RpY3VtX1Byb2plY3QyL0RhdGEvcHJvY2Vzc2VkSW5kby1XSVRIT1VUIGRpc2FnZ3JlZ2F0aW9uLmNzdicpCm5yb3cocHJvY2Vzc2VkSW5kb19Ob19EaXNhZ2cpCmBgYAoKCgojIyBHdWF0ZW1hbGEKCkFsc28gd2FudGVkIHRvIGxvb2sgYXQgdGhlIHNhbWUgd2l0aCBndWF0ZW1hbGEgCgpgYGB7ciBndWF0ZW1hbGEgdHJlZSBtYXAsIGVjaG89RkFMU0UsIGV2YWwgPSBUUlVFIH0KZ3VhdGVtYWxhX3RpbWUgPC0gcmVhZC5jc3YoJ34vUU1TUy9HNTA1NV9QcmFjdGljdW1fUHJvamVjdDIvRGF0YS9ndWF0ZW1hbGFfaW5kaWNhdG9yc190aW1lLmNzdicpCgpndWF0ZW1hbGFfbWVhc3VyZXMgPC0gZ3VhdGVtYWxhX3RpbWUgJT4lIGdyb3VwX2J5KFRhcmdldCxJbmRpY2F0b3IsU2VyaWVzRGVzY3JpcHRpb24sVW5pcXVlSUQpICU+JSBzdW1tYXJpemUoKQoKZ3VhdGVtYWxhX21lYXN1cmVzIDwtIGd1YXRlbWFsYV9tZWFzdXJlcyAlPiUgbXV0YXRlKGRpc2FnZ3JlZ2F0aW9uID0gaWZlbHNlKGdyZXBsKCdNQUxFfEZFTUFMRXwxNS0yNHwyNSt8MTUtNDknLFVuaXF1ZUlEKT09VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhZ2Vfc2V4JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgnVVJCQU58UlVSQUwnLFVuaXF1ZUlEKT09VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2VvZ3JhcGhpY19yZWdpb24nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgnPDVZfDwxWXw8MU0nLFVuaXF1ZUlEKT09VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoJ01JTHxDQU58RElBfFJFU3xDQVJ8TkZPfENST3xOTUF8V09EfEFMUHxXQ0h8UEVUfEJJTXxNRU98R0JPfE5NTXxGT0Z8Q0xPfE9JTHxURVh8Tk1DJyxVbmlxdWVJRCk9PVRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmF3X21hdGVyaWFsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgnVVBQU0VDfExPV1NFQycsVW5pcXVlSUQpPT1UUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VjdG9yJywnb3RoZXIvbm90X2Rpc2FnZ3JlZ2F0ZWQnKSkpKSkpCgpybGFuZzo6bGFzdF9lcnJvcigpCnRtIDwtZ3VhdGVtYWxhX21lYXN1cmVzICU+JSBncm91cF9ieShkaXNhZ2dyZWdhdGlvbikgJT4lIG11dGF0ZShjb3VudCA9IG4oKSkgJT4lIHVuZ3JvdXAoKSAlPiUgZ3JvdXBfYnkoZGlzYWdncmVnYXRpb24sY291bnQpICU+JSBzdW1tYXJpemUoKSAlPiUKICB0cmVlbWFwKGluZGV4PSJkaXNhZ2dyZWdhdGlvbiIsCiAgICAgICAgICB2U2l6ZT0iY291bnQiLAogICAgICAgIHR5cGU9ImluZGV4IiwKICAgICAgICBmb250c2l6ZS5sYWJlbHM9YygxMiwgOCksIAogICAgICAgIHBhbGV0dGUgPSAiUHVycGxlcyIsCiAgICAgICAgZm9udGZhbWlseS50aXRsZSA9ICJBcmlhbCBOYXJyb3ciLAogICAgICAgIGZvbnRmYW1pbHkubGFiZWxzID0gIkFyaWFsIE5hcnJvdyIsCiAgICAgICAgYm9yZGVyLmNvbD0id2hpdGUiLAogICAgICAgIHRpdGxlID0gJ01lYXN1cmVzIGFuZCBEaXNhZ2dyZWdhdGlvbicKICApCgpoY3RyZWVtYXAodG0sIGFsbG93RHJpbGxUb05vZGUgPSBUUlVFLCBsYXlvdXRBbGdvcml0aG0gPSAic3F1YXJpZmllZCIpICU+JQogIGhjX3RpdGxlKHRleHQgPSAiRGlzYWdncmVnYXRlZCBEYXRhIChHdWF0ZW1hbGEpIikgJT4lCiAgaGNfdG9vbHRpcChwb2ludEZvcm1hdCA9ICI8Yj57cG9pbnQubmFtZX08L2I+Ojxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgTWVhc3VyZXM6IHtwb2ludC52YWx1ZTosLjBmfTxicj4iKQoKYGBgCgpUaGlzIGlzIGEgYml0IG1vcmUgb2YgYSBsb29rIGF0IHRoZSBhYm92ZSBkaXNhZ2dyZWdhdGlvbiwgd2hlcmVpbiB3ZSBsb29rIGFsc28gYXQgd2hldGhlciBtZWFzdXJlcyBhcmUgZGlzYWdncmVnYXRlZCBhbmQgaG93IG1hbnkgKHBlciB0YXJnZXQsIHN1YnNldCBieSBnb2FsKQpgYGB7ciBndWF0ZW1hbGEgYmFyIGNoYXJ0LCBlY2hvPUZBTFNFLCBldmFsID1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpndWF0ZW1hbGFfZGlzYWdncmVnYXRlZF9pbmRpY2F0b3JzIDwtIGd1YXRlbWFsYV90aW1lICU+JSBtdXRhdGUoZGlzYWdncmVnYXRpb24gPSBpZmVsc2UoZ3JlcGwoJ01BTEV8RkVNQUxFfDE1LTI0fDI1K3wxNS00OScsVW5pcXVlSUQpPT1UUlVFLCdhZ2Vfc2V4JywgaWZlbHNlKGdyZXBsKCdVUkJBTnxSVVJBTCcsVW5pcXVlSUQpPT1UUlVFLCdnZW9ncmFwaGljX3JlZ2lvbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGdyZXBsKCc8NVl8PDFZfDwxTScsVW5pcXVlSUQpPT1UUlVFLCd0aW1lJywKaWZlbHNlKGdyZXBsKCdNSUx8Q0FOfERJQXxSRVN8Q0FSfE5GT3xDUk98Tk1BfFdPRHxBTFB8V0NIfFBFVHxCSU18TUVPfEdCT3xOTU18Rk9GfENMT3xPSUx8VEVYfE5NQycsVW5pcXVlSUQpPT1UUlVFLCdyYXdfbWF0ZXJpYWwnLAogICAgICAgaWZlbHNlKGdyZXBsKCdVUFBTRUN8TE9XU0VDJyxVbmlxdWVJRCk9PVRSVUUsJ3NlY3RvcicsJ290aGVyL25vdF9kaXNhZ2dyZWdhdGVkJykpKSkpKSAlPiUgbXV0YXRlKGRpc2FnZ3JlZ2F0ZWRfID0gaWZlbHNlKGRpc2FnZ3JlZ2F0aW9uID09J290aGVyL25vdF9kaXNhZ2dyZWdhdGVkJywnbm90IGRpc2FnZ3JlZ2F0ZWQnLCdkaXNhZ2dyZWdhdGVkJykpICU+JSBncm91cF9ieShJbmRpY2F0b3IsZGlzYWdncmVnYXRlZF8pICU+JSBtdXRhdGUoY291bnRfZGlzYWdncmVnYXRlZCA9IG4oKSkgJT4lIHVuZ3JvdXAoKSAlPiUgZ3JvdXBfYnkoVGFyZ2V0LEluZGljYXRvcixkaXNhZ2dyZWdhdGVkXyxjb3VudF9kaXNhZ2dyZWdhdGVkKSAKCmZvcihpIGluIDE6MTcpewpwcmludCgKICBndWF0ZW1hbGFfZGlzYWdncmVnYXRlZF9pbmRpY2F0b3JzICU+JSBzdWJzZXQoR29hbD09aSkgJT4lIAogICAgZ2dwbG90KGFlcyh4PVRhcmdldCxmaWxsPWRpc2FnZ3JlZ2F0ZWRfKSkgKwogICAgZ2VvbV9iYXIocG9zaXRpb249J3N0YWNrJyxiaW53aWR0aD0zKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCdkaXNhZ2dyZWdhdGVkJz0nbWFyb29uJywnbm90IGRpc2FnZ3JlZ2F0ZWQnID0gJ2xhdmVuZGVyJykpKwogICAgdGhlbWVfaXBzdW0oYmFzZV9zaXplID0gMTIsIGF4aXNfdGl0bGVfc2l6ZSA9IDE0KSArCiAgICB0aGVtZSgKICAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKSArCiAgICAgICAgbGFicyh0aXRsZSA9IHBhc3RlKCdHb2FsICcsaSksCiAgICAgICAgICAgICAgc3VidGl0bGUgPSAiQSBudW1iZXIgb2YgZ29hbHMgYW5kIHRhcmdldHMgaW5jbHVkZSBtYWpvcml0eSBvZiBkaXNhZ2dyZWdhdGVkIG1lYXN1cmVzIikrICAgIAogICAgbGFicyhmaWxsID0gIkRpc2FnZ3JlZ2F0aW9uIiwgeT0iY291bnQiLCB4ID0gIiIpIAopCn0KCmBgYAoKIyMgTWVhc3VyZXMgd2l0aCBvbmx5IG9uZSBleGlzdGVudCB5ZWFyIAoKCiMjIFdlaWdodGVkIGRlZ3JlZSBvZiBlYWNoIG1lYXN1cmUgCg==